package com.system.onlineUser;


import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class SessionUserManagerServlet extends HttpServlet {
	
	/** 类名称 * */

	public static final String className = SessionUserManagerServlet.class.getName();
	private static final long serialVersionUID = 1L;// 序列化版本UID


	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException {
		HttpSession   session   =   request.getSession(true); 
		SessionListener   sessionListener=new SessionListener(request.getRemoteAddr()); 
		//对于每一个会话过程均启动一个监听器    
		session.setAttribute("listener",sessionListener);   
		//将监听器植入HttpSession，这将激发监听器调用valueBound方法，从而记录日志文件。 
		//当系统退出登录时，只需简单地调用session.removeAttribute(“listener”);即可自动调用监听器的valueUnbound方法。或者，当Session   Time   Out的时候也会调用此方法。 


		//登录人数的统计：
		ServletContext   session1=getServletConfig().getServletContext();//
		if((SessionListener)session1.getAttribute( "listener")==null) 
        { 
          SessionListener   sessionListener1=new   SessionListener( "count");//只设置一次，不同于上面日志文件的记录每次会话均设置。即当第一个客户连接到服务器时启动一个全局变量，此后所有的客户将使用相同的上下文。 
          session1.setAttribute( "listener",sessionListener1);//将监听器对象设置成ServletContext的属性，具有全局范围有效性，即所有的客户均可以取得它的实例。 
        } 
		session.setAttribute( "listener",(SessionListener)session1.getAttribute( "listener"));
		//取出此全局对象，并且将此对象绑定到某个会话中，此举将促使监听器调用valueBound，计数器加一。 在此后的程序中随时可以用以下代码取得当前的登录人数： 
        ((SessionListener)session.getAttribute( "listener")).getCount();
        //getCount()是监听器的一个方法，即取得当前计数器的值也就是登录人数了。  



	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException {
		doGet(request, response);
	}

}
